﻿//Copyright © 2012  Daniel Lopez

//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace NASM_Develop_IDE
{
    internal static class ErrorLineNumbersExtracter
    {
        public static Dictionary<string, List<int>> GetLineNumbers(string output)
        {
            try
            {
                var pathRegex = new Regex(@".*\.(asm)");
                var lineNumbers = new Dictionary<string, List<int>>();

                Regex numberRegex = new Regex(@"(\d+):");
                foreach (var line in output.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
                {
                    var pathMatch = pathRegex.Match(line);
                    if (pathMatch.Success)
                    {
                        var path = Path.GetFileName(pathMatch.Value);
                        List<int> lines;
                        if (!lineNumbers.TryGetValue(path, out lines))
                        {
                            lines = new List<int>();
                            lineNumbers[path] = lines;
                        }
                        var numberMatch = numberRegex.Match(line.Replace(pathMatch.Value, ""));
                        if (numberMatch.Success && numberMatch.Groups.Count > 1)
                        {
                            lines.Add(int.Parse(numberMatch.Groups[1].Value));
                        }
                    }
                }

                return lineNumbers;
            }
            catch
            {
                return new Dictionary<string, List<int>>();
            }
        }

    }
}
